package com.tech.service.impl;

import com.tech.mapper.GoodsDao;
import com.tech.mapper.GoodsImageDao;
import com.tech.mapper.factory.DaoImplFactory;
import com.tech.repository.dto.GoodsInfo;
import com.tech.repository.entity.Goods;
import com.tech.repository.entity.GoodsImage;
import com.tech.view.common.GraphicsUtil;

import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;
import java.util.stream.Collectors;

@Deprecated
public class GoodsServiceOld {
	public final static int IMAGE_MAX_SIZE = 600;
	public static int DEFAULT_COUNT = 50;
	private GoodsDao goodsDao = DaoImplFactory.getGoodsDao();
	private GoodsImageDao goodsImageDao = DaoImplFactory.getGoodsImageDao();

	/**
	 * 获取推荐书籍
	 *
	 * @return 推荐书籍列表
	 */
	public List<Goods> getHOTData() {
		// TODO 首页只查询第一张图片，只有等点击哪一张商品进入详情页之后再进行商品图片的后续查询
		TreeMap<Integer, List<Goods>> allGoods = goodsDao.getAllGoods();
		ArrayList<Goods> list = new ArrayList<>();
		allGoods.forEach((integer, goods) -> list.addAll(goods));
		return list;
	}

	/**
	 * 添加新的商品信息
	 *
	 * @param goods 新的商品信息
	 * @return 新商品所属ID
	 */
	public int addGoods(Goods goods) {
		return goodsDao.addGoods(goods);
	}

	public int addGoodsImage(GoodsImage goodsImage) {
		return goodsImageDao.addGoodsImage(goodsImage);
	}

	public Goods getGoods(int goodsId) {
		return goodsDao.getGoodsByGid(goodsId);
	}

	public GoodsInfo getGoodsInfo(int goodsId) {
		return goodsDao.getGoodsInfo(goodsId);
	}

	/**
	 * 获取首页推荐商品，每个商品最多一个图片
	 *
	 * @param beginIndex 开始的商品，即从第 beginIndex 开始查找
	 * @param count      获取的商品个数，如果不够的话就小于 DEFAULT_COUNT 个商品
	 * @return 分页、人气排序后的商品列表
	 */
	public List<GoodsInfo> getRecommendGoods(int beginIndex, int count) {
		// TODO 这里每次都会查询所有数据，优化：每次只查询 Session 中没有的数据(通过ID)
		//  并且查询后的图片保存到本地，以后优先查询本地
		List<GoodsInfo> goodsInfos = getRecommendGoods(beginIndex, count);

		// 并行缩放图片大小
		return goodsInfos.parallelStream().peek(
				goodsInfo -> goodsInfo.setImages(goodsInfo.getImages().parallelStream().peek(
						goodsImage -> goodsImage.setImage(
								GraphicsUtil.createScaledCompositeInstance(goodsImage.getImage(), IMAGE_MAX_SIZE, false))).collect(Collectors.toList()))
		).collect(Collectors.toList());
	}

	/**
	 * 根据条件查询商品
	 *
	 * @param beginIndex 开始的商品，即从第 beginIndex 开始查找
	 * @param count      获取的商品个数
	 * @param imageCount 每个商品的图片数量，-1表示该商品所有图片
	 * @param order      排序的描述符
	 * @return 商品信息
	 */
	public List<GoodsInfo> getGoodsList(int beginIndex, int count, int imageCount, String order) {
		List<Goods> goods = goodsDao.getGoodsList(beginIndex, count, order);
		return goods.stream()
				.map(g -> new GoodsInfo(g, goodsImageDao.getGoodsImagesList(g.getGid(), imageCount)))
				.collect(Collectors.toList());
	}

	public List<Goods> getGoods(int beginIndex, int count) {
		return goodsDao.getGoodsList(beginIndex, count, null);
	}

	public int getGoodsCount() {
		return goodsDao.getGoodsCount();
	}

	public boolean updateGoods(Goods editedGoods) {
		return goodsDao.updateGoods(editedGoods);
	}

	public boolean delGoods(int goodsId) {
		return goodsDao.delGoods(goodsId);
	}
}
